package com.fee.xmediaplayer.demo

import tv.danmaku.ijk.media.player.IMediaPlayer
import tv.danmaku.ijk.media.player.IjkTimedText

/**
 * 播放器监听者
 */
interface IPlayerListener : IMediaPlayer.OnPreparedListener, IMediaPlayer.OnCompletionListener,
    IMediaPlayer.OnBufferingUpdateListener, IMediaPlayer.OnSeekCompleteListener,
    IMediaPlayer.OnVideoSizeChangedListener, IMediaPlayer.OnErrorListener,
    IMediaPlayer.OnInfoListener,IMediaPlayer.OnTimedTextListener {

    /**
     * 播放器已经 准备/加载资源 就绪的回调
     * @param player 当前播放器
     */
    override fun onPrepared(player: IMediaPlayer){

    }

    /**
     * 播放器 播放完成的回调
     * @param player 当前播放器
     */
    override fun onCompletion(player: IMediaPlayer)

    /**
     * 播放器 缓冲进度的回调
     * @param player 当前播放器
     * @param bufferedPercent 当前已缓冲的进度
     */
    override fun onBufferingUpdate(player: IMediaPlayer, bufferedPercent: Int) {
    }

    /**
     * 播放器 跳转 完成回调
     * @param player 当前播放器
     */
    override fun onSeekComplete(player: IMediaPlayer) {
    }

    /**
     * 播放器 错误信息的 回调
     * @param player 当前播放器
     * @param what 错误类型
     * @param extra 额外信息
     * @return true: 最后会中断播放器的默认处理；false: 不中断播放器默认的处理,即播放器会继续回调 [onCompletion]
     */
    override fun onError(player: IMediaPlayer, what: Int, extra: Int): Boolean

    /**
     * 播放器的 信息回调
     * @param player 当前播放器
     * @param what 消息类型
     * @param extra 额外类型
     */
    override fun onInfo(player: IMediaPlayer, what: Int, extra: Int): Boolean {
        return false
    }

    /**
     * 视频尺寸 信息变化 的回调
     * @param player 当前播放器
     * @param width 当前视频的宽
     * @param height 当前视频的高
     * @param sarNum ??
     * @param sarDen ??
     */
    override fun onVideoSizeChanged(
        player: IMediaPlayer,
        width: Int,
        height: Int,
        sarNum: Int,
        sarDen: Int
    ) {
    }

    /**
     *
     */
    override fun onTimedText(player: IMediaPlayer, ijkTimedText: IjkTimedText?) {
    }
}